# Celery实现了生产者消费者设计模式

# 4个人
# Celery: 实现了生产者消费者设计模式
# 生产者： 生产任务
# 消息队列(broker)： 列队的作用
# 消费者： 执行任务(函数)
#    通过指令来消费(执行)任务(函数)
#    (到BASE_DIR下)虚拟环境下 celery celery实例对象的文件路径 worker -l INFO
    # celery -A celery_tasks.main worker -l INFO (-l INFO 可以不加，加上在后台显示信息  ‘终端’？)

# 告知celery  工程setting文件在哪
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo_mall.settings')



from celery import Celery

# 1.创建Celery实例

# celery的第一个参数  main 本质是一个名字
# 这个名字一般使用 任务 的名字(随便起一个即可  没什么是实质作用)
app=Celery(main='meiduo')


# 2. 加载celery的配置信息
# 配置信息中 指定了 broker(消息队列)
# 这里选择 redis 作为消息队列的broker(redis保存在内存中，加载快)
# 把broker的配置单独放到一个文件夹中，让celery加载这个文件
# 因为 之后还有可能有其他的配置，所以最好单独创建一个配置文件

app.config_from_object('celery_tasks.config')


# 补充  任务包的任务需要celery调用自检检查函数(在main.py里写)
# app.autodiscover_task([])
# 需注意  tasks(列表)

# 元素是 字符串，就是任务的包路径
app.autodiscover_tasks(['celery_tasks.sms','celery_tasks.email'])
